package com.jxb.myshop.services.impl;

import com.jxb.myshop.common.ResponseResult;
import com.jxb.myshop.dao.CartDao;
import com.jxb.myshop.dao.ProductDao;
import com.jxb.myshop.dao.impl.CartDaoImpl;
import com.jxb.myshop.dao.impl.ProductDaoImpl;
import com.jxb.myshop.entity.Cart;
import com.jxb.myshop.entity.Product;
import com.jxb.myshop.entity.vo.CartVo;
import com.jxb.myshop.services.CartServices;

import java.sql.SQLException;
import java.util.List;

public class CartServicesImpl implements CartServices {
    private CartDao cd = new CartDaoImpl();
    private ProductDao pd = new ProductDaoImpl();

    @Override
    public ResponseResult getAll(int uid) {
        try {
            List<Cart> list = cd.getAll(uid);
            return ResponseResult.createSuccess(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResponseResult.createFail("没找到任何数据");
    }

    @Override
    public ResponseResult createCart(int uid, int pid) {
        try {
            // 1.先通过uid和pid获取用户购物车
            Cart cart= cd.getCart(uid,pid);
            // 2.再通过pid查询商品数据
            Product pro = pd.getProById(pid);
            // 3.判断购物车是否为空
            if (cart == null) {
                // 如果为空就创建一个cart对象并进行赋值
                cart = new Cart(uid,pid,pro.getPprice(),1);
                // 新增成功并不需要返回值
                cd.createCart(cart);
            }else {
                // 如果不为空，就表明前面已经添加过该商品
                cart.setCnum(cart.getCnum() + 1);
                cart.setCcount(cart.getCnum() * pro.getPprice());
                cd.updateCartNum(cart);
            }
            return ResponseResult.createSuccess("商品添加成功");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ResponseResult.createFail("新增失败");
    }

    @Override
    public ResponseResult getCartList(int uid) {
        try {
            List<CartVo> cartVo = cd.getCartWithProduct(uid);
            return ResponseResult.createSuccess(cartVo);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ResponseResult.createFail("还没有选择商品");
    }

    @Override
    public ResponseResult clearCart(int uid, int pid) {
        try {
            // 1.声明一个变量保存dao处理的结果
            int i = 0;
            // 2.判断商品id如果,商品id是0就情况用户购物,如果不是0就删除单条购物车数据
            if (pid == 0){
                i = cd.clearAll(uid);
            }else {
                i = cd.deleteCart(uid,pid);
            }
            if (i > 0){
                return ResponseResult.createSuccess("删除成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ResponseResult.createFail("删除失败");
    }

    @Override
    public ResponseResult updateCartNum(int uid, int pid, int num) {
        try {
            int i = 0;
            // 1.首先先判断前端的num值是不是为0，如果为0，就是删除这个商品，调用dao的清除方法
            if (num == 0) {
                i = cd.deleteCart(uid,pid);
            }else {
                // 2.如果不是0就修改购物车数据
                // 3.先查询这条购物车数据,为了购物车的修改
                Cart cart = cd.getCart(uid, pid);
                // 4.查询这个商品的数据,为了修改购物车里面的小计的数据而需要的
                Product pro = pd.getProById(pid);
                // 5.进行数量的修改
                cart.setCnum(cart.getCnum() + num);
                cart.setCcount(cart.getCnum() * pro.getPprice());
                // 6.把封装好的数据放入数据库更新
                i = cd.updateCartNum(cart);
            }
            if (i > 0){
                return ResponseResult.createSuccess("修改成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ResponseResult.createFail("修改失败");
    }
}
